From: Marco Trevisan (TreviƱo) Date: Mon, 1 Feb 2021 15:42:21 +0000 (+0100) Subject: gdm: Don't try answering query if the user verifier has been deleted X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~616^2^2~367 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=c936ca3ea000e11b37c760f94b26283da81ced3c;p=gnome-shell.git gdm: Don't try answering query if the user verifier has been deleted Answering a query may be delayed to the moment in which we've not any more messages in the queue, however this case can also happen just after we've cleared the UserVerifier and in such case we'd have nothing to answer, but we currently throw an error: JS ERROR: Exception in callback for signal: no-more-messages: TypeError: this._userVerifier is null answerQuery/signalId<@resource:///org/gnome/shell/gdm/util.js:249:17 _emit@resource:///org/gnome/gjs/modules/core/_signals.js:133:47 finishMessageQueue@resource:///org/gnome/shell/gdm/util.js:266:14 _clearMessageQueue@resource:///org/gnome/shell/gdm/util.js:301:14 clear@resource:///org/gnome/shell/gdm/util.js:223:14 cancel@resource:///org/gnome/shell/gdm/util.js:205:18 reset@resource:///org/gnome/shell/gdm/authPrompt.js:482:32 cancel@resource:///org/gnome/shell/gdm/authPrompt.js:569:14 vfunc_key_press_event@resource:///org/gnome/shell/gdm/authPrompt.js:128 So handle this case more gracefully keeping track of the current cancellable and checking whether it is still valid before trying to answer a query or do a delayed action. Part-of: --- diff --git a/js/gdm/util.js b/js/gdm/util.js index 54cd34631..048e2bf5e 100644 --- a/js/gdm/util.js +++ b/js/gdm/util.js @@ -260,9 +260,11 @@ var ShellUserVerifier = class { if (!this.hasPendingMessages) { this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null); } else { + const cancellable = this._cancellable; let signalId = this.connect('no-more-messages', () => { this.disconnect(signalId); - this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null); + if (!cancellable.is_cancelled()) + this._userVerifier.call_answer_query(serviceName, answer, cancellable, null); }); } } @@ -583,9 +585,10 @@ var ShellUserVerifier = class { if (!this.hasPendingMessages) { this._retry(); } else { + const cancellable = this._cancellable; let signalId = this.connect('no-more-messages', () => { this.disconnect(signalId); - if (this._cancellable && !this._cancellable.is_cancelled()) + if (!cancellable.is_cancelled()) this._retry(); }); } @@ -594,9 +597,11 @@ var ShellUserVerifier = class { if (!this.hasPendingMessages) { this._cancelAndReset(); } else { + const cancellable = this._cancellable; let signalId = this.connect('no-more-messages', () => { this.disconnect(signalId); - this._cancelAndReset(); + if (!cancellable.is_cancelled()) + this._cancelAndReset(); }); } }